On this page you can get a detailed analysis of a word or phrase, produced by the best artificial intelligence technology to date:
Семафо́р (англ. semaphore) — примитив синхронизации работы процессов и потоков, в основе которого лежит счётчик, над которым можно производить две атомарные операции: увеличение и уменьшение значения на единицу, при этом операция уменьшения для нулевого значения счётчика является блокирующейся. Служит для построения более сложных механизмов синхронизации и используется для синхронизации параллельно работающих задач, для защиты передачи данных через разделяемую память, для защиты критических секций, а также для управления доступом к аппаратному обеспечению.
Вычислительные семафоры используются для контроля над ограниченными ресурсами. Двоичные семафоры обеспечивают взаимное исключение исполнения критических секций, а их упрощённой реализацией являются мьютексы, которые более ограничены в использовании. Помимо взаимного исключения в общем случае семафоры и мьютексы могут использоваться во множестве других типовых алгоритмов, включая сигнализирование другим задачам, разрешение прохождения определённых контрольных точек только для одной задачи единовременно по аналогии с турникетом, задачу производителя и потребителя, подразумевающую передачу данных от одних задач другим, барьеры, позволяющие синхронизировать группы задач в определённых контрольных точках, условные переменные для оповещения других задач о каких-либо событиях и блокировки чтения и записи, разрешающие одновременное чтение данных, но запрещающих их одновременное изменение.
Типовыми проблемами использования семафоров являются одновременное блокирование двух задач в ожидании друг друга и ресурсное голодание, в результате чего ресурс может быть периодически недоступен для одних задач из-за его использования другими задачами. При использовании в процессах с приоритетом реального времени может возникнуть инверсия приоритетов, которая может привести к неограниченной по времени блокировке процесса с более высоким приоритетом из-за захвата семафора процессом с более низким приоритетом, в то время как процессорное время отдаётся процессу со средним приоритетом, решением чего является наследование приоритетов.